package controlador;


import java.util.Vector;

import persistencia.perControlCambio;
import persistencia.perInconsistencia;
import persistencia.perMantenimiento;
import persistencia.perMovimiento;
import persistencia.perSede;
import persistencia.perTecnico;
import persistencia.perVehiculo;

import frames.LoginFrame;
import frames.MenuFrame;

import negocio.ControlCambio;
import negocio.Inconsistencia;
import negocio.Login;
import negocio.Movimiento;
import negocio.Sede;
import negocio.Tecnico;
import negocio.Vehiculo;
import negocio.VehiculoMant;

public class Sistema {
	public static Sistema metrogas;
	private Vector <Sede> sedes;
	private Vector <Tecnico> tecnicos;
	private Vector <Vehiculo> vehiculos;
	private Login logins;
	private Vector <ControlCambio> controlCambios;
	private Vector <VehiculoMant> enMantenimiento;
	private Vector <Movimiento> movimientos;
	
	public static void main(String[] args) {
		metrogas=getInstance();
		LoginFrame ventan=new LoginFrame();
		
		
	}
	
	
	public Sistema()
	{
		tecnicos=new Vector <Tecnico>();
		vehiculos=new Vector <Vehiculo>();
		sedes=new Vector <Sede>();
		enMantenimiento=new Vector <VehiculoMant>();
		logins=null;
		controlCambios=new Vector <ControlCambio>();
		movimientos=new Vector <Movimiento>();
	}	
	
	public static Sistema getInstance() 
	{
		if (metrogas == null)
			metrogas = new Sistema();				
		return metrogas;
	}		
	
	
	
	public Vector<Tecnico> getTecnicos() {
		return tecnicos;
	}
	public void setTecnicos(Vector<Tecnico> tecnicos) {
		this.tecnicos = tecnicos;
	}
	public Vector<Vehiculo> getVehiculos() {
		return vehiculos;
	}
	public void setVehiculos(Vector<Vehiculo> vehiculos) {
		this.vehiculos = vehiculos;
	}
	public Vector<Sede> getSedes() {
		return sedes;
	}
	public void setSedes(Vector<Sede> sedes) {
		this.sedes = sedes;
	}
	public Login getLogins() {
		return logins;
	}
	public void setLogins(Login logins) {
		this.logins = logins;
	}
	public Vector<ControlCambio> getControlCambios() {
		return controlCambios;
	}
	public void setControlCambios(Vector<ControlCambio> controlCambios) {
		this.controlCambios = controlCambios;
	}
	public Vector<VehiculoMant> getEnMantenimiento() {
		return enMantenimiento;
	}
	public void setEnMantenimiento(Vector<VehiculoMant> enMantenimiento) {
		this.enMantenimiento = enMantenimiento;
	}
	public void agregarSede (Sede s)
	{
		sedes.add(s);
	}
	public Sede buscarSede(String nombre)
	{
		Sede nueva=null;
		for(int i=0;i<this.sedes.size();i++)
		{
			nueva=sedes.get(i);
			if(nueva.getNombre().equals(nombre))
				return nueva;
		}
		return nueva;
	}
	public Vehiculo buscarVehiculo(String dominio)
	{
		Vehiculo nueva=null;
		for(int i=0;i<this.vehiculos.size();i++)
		{
			nueva=vehiculos.get(i);
			if(nueva.getDominio().equals(dominio))
			{
				return nueva;
			}
				
		}
		perVehiculo a=new perVehiculo();
		nueva=a.select(dominio);
		return nueva;
	}
	public Tecnico buscarTecnico(int dominio)
	{
		Tecnico nueva=null;
		for(int i=0;i<this.tecnicos.size();i++)
		{
			nueva=tecnicos.get(i);
			if(nueva.getDNI()==dominio)
				return nueva;
		}
		perTecnico a=new perTecnico();
		return a.select(dominio);
	}
	
	//Administracion Sedes ==============================================
		public boolean altaSede(Sede s){
			for (int i = 0; i < sedes.size(); i++){
				Sede aux = (Sede) sedes.get(i);
				if (aux.getNroSede() == s.getNroSede())
					return false;
			}
				sedes.add(s);
				return true;
		}
		
		public Sede buscarSede(int nroSede){
			Sede aux = null;
			for (int i = 0; i < sedes.size(); i++){
				aux = (Sede) sedes.get(i);			
				if (aux.getNroSede() == nroSede)
					return aux;
			}
			return aux;		
		}
		public void eliminarTecnico(int dominio)
		{
			for(int i=0;i<this.tecnicos.size();i++)
			{
				if(tecnicos.get(i).getDNI()==dominio)
				{
					tecnicos.remove(i);
					perTecnico a=new perTecnico();
					a.delete(dominio);
				}
			}
		}
		public void eliminarSede(Sede s){
			sedes.remove(s);
		}
		public void agregarVehiculo(Vehiculo vel)
		{
			vehiculos.add(vel);
			perVehiculo a=new perVehiculo();
			a.Insert(vel);
		}
		public void agregarTecnico(Tecnico t)
		{
			tecnicos.add(t);
			perTecnico a=new perTecnico();
			a.insert(t);
		}
		public void actualizarTecnico(Tecnico t)
		{
			perTecnico a=new perTecnico();
			a.update(t);
		}
		public void actualizarVehiculo(Vehiculo t)
		{
			//this.eliminarVehiculo(t.getDominio());
			vehiculos.add(t);
			perVehiculo a=new perVehiculo();
			a.update(t);
		}
		public int agregarMantenimiento(VehiculoMant vm)
		{
			enMantenimiento.add(vm);
			perMantenimiento a=new perMantenimiento();
			return a.insert(vm);			 
		}
		public void eliminarMantenimiento(VehiculoMant vm)
		{
			enMantenimiento.remove(vm);
		}
		public VehiculoMant buscarMantenimiento(int numero)
		{
			VehiculoMant vm=null;
			for(int i=0;enMantenimiento.size()<i;i++)
			{
				vm=(VehiculoMant) enMantenimiento.get(i);
				if(vm.getNumero()==numero)
					return vm;
			}
			perMantenimiento a=new perMantenimiento();
			vm=a.select(numero);
			return vm;
		}
		public void autorizar(int numero)
		{
			VehiculoMant vm=null;
			if(enMantenimiento.size()==0){
				
				//vm.setAprobado(true);
				perMantenimiento a=new perMantenimiento();
				a.update(numero);
			}else
			{
				for(int i=0;enMantenimiento.size()<i;i++)
				{
					vm=(VehiculoMant) enMantenimiento.get(i);
					if(vm.getNumero()==numero)
					{
						vm.setAprobado(true);
						perMantenimiento a=new perMantenimiento();
						a.update(numero);
					}					
				}	
			}
		}
		public void registrarMovimiento(Movimiento mov){
			movimientos.add(mov);
			perMovimiento a=new perMovimiento();
			a.insert(mov);
		}
		public void guardarInconsistencia(Inconsistencia i)
		{
			perInconsistencia a=new perInconsistencia();
			a.insert(i);
		}
		//Administracion Vehiculos ===========================================
		public boolean altaVehiculo(Vehiculo v){
			vehiculos.add(v);
			perVehiculo pv=new perVehiculo();
			pv.Insert(v);
			return true;
		}
		
		public void agregarControlCambio(ControlCambio cc)
		{
			controlCambios.add(cc);
		}
		
		public void eliminarVehiculo(String dominio){
			Vehiculo i=this.buscarVehiculo(dominio);
			
			vehiculos.remove(dominio);
			perVehiculo c=new perVehiculo();
			c.delete(dominio);	
		}

		public void levantarCosasMemoria()
		{
			perSede s = new perSede();
			s.levantarMemoriaSedes();
			//perCentroCosto cc=new perCentroCosto();
			//cc.levantarMemoriaCC();
		}
		public void guardarControlCambio(ControlCambio cc)
		{
			perControlCambio pcc=new perControlCambio();
			controlCambios.add(cc);
			pcc.insert(cc);
		}


		

		
		
}
